<?php
namespace Amis\dataviewer;

use Amis\type\Api;
use Amis\Basics\AmisBasics;

class Chart extends AmisBasics
{
    public string $type = 'chart';

    /**
     * 外层 Dom 的类名
     * @param string $className
     * @return $this
     */
    public function className(string $className)
    {
        $this->className = $className;
        return $this;
    }

    /**
     * 配置项接口地址
     * @param \Amis\type\Api $api
     * @return $this
     */
    public function api(Api $api)
    {
        $this->api = $api;
        return $this;
    }

    /**
     * 通过数据映射获取数据链中变量值作为配置
     * @param $source
     * @return $this
     */
    public function source($source)
    {
        $this->source = $source;
        return $this;
    }

    /**
     * 组件初始化时，是否请求接口
     * @param bool $initFetch
     * @return $this
     */
    public function initFetch(bool $initFetch)
    {
        $this->initFetch = $initFetch;
        return $this;
    }

    /**
     * 刷新时间(最小 1000)
     * @param int $interval
     * @return $this
     */
    public function interval(int $interval = 3000)
    {
        $this->interval = $interval > 1000 ? 1000 : $interval;
        return $this;
    }

    /**
     * 设置 eschars 的配置项,当为string的时候可以设置 function 等配置项
     * @param string $config
     * @return $this
     */
    public function config(string $config)
    {
        $this->config = $config;
        return $this;
    }

    /**
     * 设置根元素的 style
     * @param string|int $style
     * @return $this
     */
    public function style($style)
    {
        $this->style = $style;
        return $this;
    }

    /**
     * 设置根元素的宽度
     * @param $width
     * @return $this
     */
    public function width($width)
    {
        $this->width = $width;
        return $this;
    }

    /**
     * 设置根元素的高度
     * @param $height
     * @return $this
     */
    public function height($height)
    {
        $this->height = $height;
        return $this;
    }

    /**
     * 每次更新是完全覆盖配置项还是追加？
     * @param bool $replaceChartOption
     * @return $this
     */
    public function replaceChartOption(bool $replaceChartOption = false)
    {
        $this->replaceChartOption = $replaceChartOption;
        return $this;
    }

    /**
     * 当这个表达式的值有变化时更新图表
     * @param string $trackExpression
     * @return $this
     */
    public function trackExpression(string $trackExpression)
    {
        $this->trackExpression = $trackExpression;
        return $this;
    }
}